#include "StdAfx.h"
#include "HideDir.h"
#include <direct.h>
#include <shlwapi.h>

CHideDir::CHideDir(void)
{
}

CHideDir::~CHideDir(void)
{
}
int CHideDir::GetPathType(wchar_t chDisk)
{
	wstring szpath = Form_String(L"%c:\\",chDisk);
	if ( PathIsDirectory( (szpath + VRV_NAME_PATH_FAT32).c_str() ) )
	{
		return VRV_DISK_FAT;
	}
	if ( PathIsDirectory( (szpath + VRV_NAME_PATH_NTFS).c_str() ) )
	{
		return VRV_DISK_NTFS;
	}
	return VRV_DISK_NONE;
}
bool CHideDir::IsDirectoryExist(wstring szpath)
{
	if (PathIsDirectory(szpath.c_str()))
	{
		return true;
	}
	else
	{
		if (!CreateDirectory(szpath.c_str(),NULL))
		{
			return false;
		}
	}
	return true;
}
bool CHideDir::IsUnlawDirExist(wstring szpath)
{
	if (PathIsDirectory( (szpath + NAME_UNDIRWCTORY).c_str() ) )
	{
		return true;
	}
	else
	{	
		int status;
		status = mkdir( WIDE_TO_ASCII(szpath + NAME_UNDIRWCTORY) );

		if (0!=status)
		{
			return false;
		}
	}
	return true;
}
bool CHideDir::IsDesktopExist(wstring szpath)
{
	if (PathFileExists( (szpath + NAME_DESKTOP).c_str() ))
	{
		return true;
	}
	else
	{
		if (!::WritePrivateProfileString(_T(".ShellClassInfo"),_T("CLSID"),_T("{645FF040-5081-101B-9F08-00AA002F954E}"),(szpath+NAME_DESKTOP).c_str()) )
		{
			return false;
		}
	}
	return true;
}
bool CHideDir::SetENAttributes(wstring szpath)
{
	wstring szDesktop =  szpath + NAME_DESKTOP;
	wstring szDirpath =  szpath.substr(0,szpath.size()-1);

	SetFileAttributes(szDesktop.c_str(), FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_SYSTEM);
	if ( SetFileAttributes(szDirpath.c_str(), FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_SYSTEM)
		&& SetFileAttributes(szDesktop.c_str(), FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_SYSTEM) )
	{
		return TRUE;
	}
	return FALSE;
}
bool CHideDir::CreateENDirectory(wstring szpath)
{
	IsDirectoryExist(szpath);
	IsUnlawDirExist(szpath);
	IsDesktopExist(szpath);
	SetENAttributes(szpath);
	return TRUE;
}

String CHideDir::GetRecyclerPath(wchar_t chDisk)
{
	wstring szpath ;
	wstring szdisk = Form_String(L"%c:\\",chDisk); 
	int iType = GetPathType(chDisk);
	if ( iType == VRV_DISK_FAT )
	{
		szpath = szdisk + VRV_NAME_PATH_FAT32 + _T("\\") + NAME_NTDELDIRWCTORY+ _T("\\");
	}
	else if ( iType == VRV_DISK_NTFS )
	{
		szpath = szdisk + VRV_NAME_PATH_NTFS + _T("\\") + NAME_NTDELDIRWCTORY+_T("\\");
	}
	else if ( iType == VRV_DISK_NONE )
	{
		szpath = szdisk + VRV_NAME_PATH_FAT32;
		int status;
		status = mkdir(WIDE_TO_ASCII(szpath));
		if (0!=status)
		{	
			return _T("");
		}
		SetFileAttributes(szpath.c_str(), FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_SYSTEM);
		szpath = szdisk + VRV_NAME_PATH_FAT32 + _T("\\") + NAME_NTDELDIRWCTORY + _T("\\");
	}
	if ( CreateENDirectory(szpath))
	{
		return szpath;
	}
	return _T("");
}
